#ifndef VECTOR_H
#define VECTOR_H

#include "Primitiva.h"
#include <cmath> //Para usar "sqrt" e "pow".

class Vector : public Primitiva
{
    public:
        /// Métodos públicos: ///
        // Construtores e destrutor:
        Vector():Primitiva(){}                                 ///ok!
        Vector(size_t d):Primitiva(d){}                        ///ok!
        //Vector(const Vector& v);                             ///ok!
        Vector(const char* entrada):Primitiva(entrada){}       ///ok!
        virtual ~Vector(){}                                    ///ok!

        // Nome e abreviatura da classe:
        virtual const char* get_nome() const                   ///ok!
        { return("Vector."); }
        virtual const char* get_abreviatura() const            ///ok!
        { return("v"); }

        /// Operações do vetor ///
        // Norma do vetor:
        TIPO_ELEMENTO norma() const;                           ///ok!

        // Soma de vetores:
        Vector operator+(const Vector& v) const;               ///ok!

        // Subtração de vetores:
        Vector operator-(const Vector& v) const;               ///ok!
};

/// Outras operações entre vetores ///
// Multiplicação por escalar:
Vector operator*(TIPO_ELEMENTO x, const Vector& v);                      ///ok!
Vector operator*(const Vector& v, TIPO_ELEMENTO x);                      ///ok!

// Produto escalar:
TIPO_ELEMENTO dotProduct(const Vector& primeiro, const Vector& segundo); ///ok!
TIPO_ELEMENTO operator^(const Vector& primeiro, const Vector& segundo);  ///ok!

// Produto vetorial:
Vector crossProduct(const Vector& primeiro, const Vector& segundo);      ///ok!
Vector operator*(const Vector& primeiro, const Vector& segundo);         ///ok!

// Ângulo entre dois vetores:
TIPO_ELEMENTO angulo(const Vector& primeiro, const Vector& segundo);
TIPO_ELEMENTO anguloGrau(const Vector& primeiro, const Vector& segundo);

#endif // VECTOR_H
